<?php
require_once(CHEMIN_MODELE . "EtablissementManager.php");
require_once(CHEMIN_MODELE . "RoleManager.php");
require_once(CHEMIN_MODELE . "UtilisateurManager.php");
require_once(CHEMIN_MODELE . "Mail.php");
?>
<div id="leftmenu">

    <div id="leftmenu_top"></div>

    <div id="leftmenu_main">    

        <h3>Mon Compte</h3>

        <ul>
            <li><a href="module-utilisateurs-compte.html">Mes infos</a></li>
            <?php if ($_SESSION['role'] == "admin" || $_SESSION['role'] == "manager") { ?>
                <li><a href="module-utilisateurs-ajouter_utilisateur.html">Ajouter utilisateur</a></li>
            <?php } ?>
        </ul>
    </div>


    <div id="leftmenu_bottom"></div>
</div>




<div id="content">


    <div id="content_top"></div>
    <div id="content_main">
        <?php
// Vérification des droits d'accès de la page
        if (!utilisateur_est_connecte()) {

            // On affiche la page d'erreur comme quoi l'utilisateur est déjà connecté   
            include CHEMIN_VUE_GLOBALE . 'erreur_non_connecte.php';
        } else {



            include CHEMIN_LIB . 'form.php';

// "formulaire_inscription" est l'ID unique du formulaire
            $form_inscription = new Form('formulaire_inscription');

            $form_inscription->method('POST');

            $form_inscription->add('Text', 'login')
                    ->label("Login");

            $form_inscription->add('Text', 'nom')
                    ->label("Nom");
            $form_inscription->add('Text', 'prenom')
                    ->label("Prénom");

            /* $form_inscription->add('Password', 'mdp')
              ->label("Mot de passe");

              $form_inscription->add('Password', 'mdp_verif')
              ->label("Mot de passe (vérification)"); */

            $form_inscription->add('Email', 'adresse_email')
                    ->label("Email");

            $form_inscription->add('Email', 'adresse_email2')
                    ->label("Email 2:")
                    ->required(false);


            $form_inscription->add('Text', 'tel_fixe')
                    ->label("Téléphone Fixe")
                    ->required(false);

            $form_inscription->add('Text', 'tel_gsm')
                    ->label("Portable")
                    ->required(false);

            //Tableau qui comporte les roles définis dans la BD
            $tabRole["--"] = "---";
            $i = 0;
            foreach (RoleManager::getAllRole() as $role) {
                $i++;
                //on récupère la position du manager dans la liste
                if ($role->getNom() == 'manager') {
                    $posManager = $i;
                }
                //on récupère la position et l'id du user dans la liste
                if ($role->getNom() == 'user') {
                    $idUser = $role->getNumero();
                    $posUser = $i;
                }

                $tabRole[$role->getNumero()] = strtoupper($role->getNom());
            }

            //affichage de certains éléments en fonction du role de l'utilisateur connecté
            if ($_SESSION['role'] == 'admin') {

                //tableau d'établissement
                $tabEts[""] = "";

                foreach (EtablissementManager::getAllEtablissement() as $ets) {
                    $tabEts[$ets->getNom()] = $ets->getNom();
                }

                $form_inscription->add('Select', 'etablissement')
                        ->label("Etablissement")
                        ->choices($tabEts);

                $form_inscription->add('Select', 'role')
                        ->label("Profil")
                        ->choices($tabRole)
                        ->value($posManager);
            } elseif ($_SESSION['role'] == 'manager') {
                $tab["--"] = "---";

                foreach (UtilisateurManager::getEtablissementsUser($_SESSION['login']) as $etablissement) {
                    $tab[$etablissement->getNom()] = $etablissement->getNom();
                }
                $form_inscription->add('Select', 'etablissement')
                        ->label("Etablissement")
                        ->choices($tab);

                $form_inscription->add('Select', 'role')
                        ->label("Profil")
                        ->choices($tabRole)
                        ->value($posUser)
                        ->disabled(true)
                        ->required(false);
                //champ caché pour le numero du role (user)
                $form_inscription->add('Hidden', 'roleId')
                        ->value($idUser);
            }

            $form_inscription->add('Submit', 'submit')
                    ->value("Inscription !");

            // Pré-remplissage avec les valeurs précédemment entrées (s'il y en a)
            $form_inscription->bound($_POST);
            // Création d'un tableau des erreurs
            $erreurs_inscription = array();


// Validation des champs suivant les règles en utilisant les données du tableau $_POST
            if ($form_inscription->is_valid($_POST)) {

                // On vérifie si les 2 mots de passe correspondent
                if ($form_inscription->get_cleaned_data('mdp') != $form_inscription->get_cleaned_data('mdp_verif')) {

                    $erreurs_inscription[] = "Les deux mots de passes entrés sont différents !";
                }



                // Si d'autres erreurs ne sont pas survenues
                if (empty($erreurs_inscription)) {

                    $hash_validation = md5(uniqid(rand(), true));

// Tentative d'ajout du membre dans la base de donnees
                    list($login, $nom, $prenom, /* $mdp, */ $adresse_email, $adresse_email2, $etablissement, $roleId, $telFixe, $telGsm) =
                            $form_inscription->get_cleaned_data('login', 'nom', 'prenom', /* 'mdp', */ 'adresse_email', 'adresse_email2', 'etablissement', 'roleId', 'tel_fixe', 'tel_gsm');

                    $mdp = UtilisateurManager::generer_mot_de_passe();
                    $user = new Utilisateur($login, sha1($mdp), $nom, $prenom);
                    $user->addUnMail(new Mail($adresse_email, "Personnel"));
                    $user->addUnRole(RoleManager::getRoleById($roleId));
                    $user->addUnEtablissement(EtablissementManager::getUnEtablissement($etablissement));
                    $insertOk = UtilisateurManager::add($user, $hash_validation);
                    if (ctype_digit($insertOk)) {
                        $prenom = $_SESSION['prenom'];
                        $nom = $_SESSION['nom'];

                        // Preparation du mail
                        $message_mail = '<html><head></head><body>
	<p>' . $prenom . " " . $nom . ' vous a inscrit sur Référentiel Européen MIAGE !</p>' .
                                '<p>Votre login est : ' . $login . " et votre mot de passe " . $mdp . '. Vous pouvez à tout moment modifier ce mot de passe à partir de l\'onglet Mon Compte</p>
	<p>Veuillez cliquer sur <a href="' . $_SERVER['SERVER_NAME'] . '/module-utilisateurs-valider_compte_' . $hash_validation . '.html">ce lien</a> pour activer votre compte !</p>
</body></html>';

                        $headers_mail = 'MIME-Version: 1.0' . "\r\n";
                        $headers_mail .= 'Content-type: text/html; charset=utf-8' . "\r\n";
                        $headers_mail .= 'From: "Referentiel Européen MIAGE" <contact@ecompetencesmiage.com>' . "\r\n";

                        // Envoi du mail
                        mail($form_inscription->get_cleaned_data('adresse_email'), 'Inscription sur Référentiel Européen MIAGE', $message_mail, $headers_mail);

                        // Affichage de la confirmation de l'inscription
                        include CHEMIN_VUE . 'inscription_effectuee.php';
                    } else {

                        // Changement de nom de variable (plus lisible)
                        $erreur = & $insertOk;

                        // On vérifie que l'erreur concerne bien un doublon
                        if (23000 == $erreur[0]) { // Le code d'erreur 23000 siginife "doublon" dans le standard ANSI SQL
                            preg_match("`Duplicate entry '(.+)' for key \d+`is", $erreur[2], $valeur_probleme);
                            $valeur_probleme = $valeur_probleme[1];

                            if ($login == $valeur_probleme) {

                                $erreurs_inscription[] = "Ce nom d'utilisateur est déjà utilisé.";
                            } else if ($adresse_email == $valeur_probleme) {

                                $erreurs_inscription[] = "Cette adresse e-mail est déjà utilisée.";
                            } else {

                                $erreurs_inscription[] = "Erreur ajout SQL : doublon non identifié présent dans la base de données.";
                            }
                        } else {

                            $erreurs_inscription[] = sprintf("Erreur ajout SQL : cas non traité (SQLSTATE = %d).", $erreur[0]);
                        }

                        // On reaffiche le formulaire d'inscription
                        include CHEMIN_VUE . 'formulaire_inscription.php';
                    }
                } else {

                    // On affiche à nouveau le formulaire d'inscription
                    include CHEMIN_VUE . 'formulaire_inscription.php';
                }
            } else {

                // On affiche à nouveau le formulaire d'inscription
                include CHEMIN_VUE . 'formulaire_inscription.php';
            }
        }
        ?>
    </div>